home *** CD-ROM | disk | FTP | other *** search
- // ===============================================================
- // Vertex Program:
- // Description:
- // Last Update: 14/08/2003
- // Coder: Andrey Honich
- // ===============================================================
-
- #include "../CGVPMacro.csi"
-
- VS20Only
-
- VertAttributes { POSITION_3 TANG_3X3 TEXCOORD0_2 }
-
- MainInput { VIEWPROJ_MATRIX, LIGHT_POS, CAMERA_POS, uniform float4x4 TexMatrix, uniform float4 EnvColors[6] }
- DeclarationsScript
- {
- IN_T0_TANG
- OUT_T0_T1_T2_T3_C0
- }
- PositionScript = PosCommon
- CoreScript
- {
- OUT.Tex0.xy = IN.TexCoord0.xy;
- OUT.Tex1.xy = IN.TexCoord0.xy;
-
- TANG_MATR
-
- // store normalized light vector
- float3 lightVec = LightPos.xyz - vPos.xyz;
- // transform light vector from object space to tangent space and pass it as a tex coords
- OUT.Tex2.xyz = mul(objToTangentSpace, lightVec.xyz);
-
- // compute view vector
- float3 viewVec = CameraPos.xyz - vPos.xyz;
-
- // transform half angle vector from object space to tangent space and pass it as a tex coords
- OUT.Tex3.xyz = mul(objToTangentSpace, viewVec.xyz);
-
- // Calculate average radiosity color from 6 colors (Cube)
- float3 tNormal;
- tNormal = mul((float3x3)TexMatrix, IN.TNormal.xyz);
- float3 Compare1 = step(tNormal, 0);
- float3 Compare0 = 1 - Compare1;
- float3 signN = sign(tNormal);
- tNormal = tNormal * tNormal;
- tNormal = tNormal * signN;
- float4 ColorX = EnvColors[0]*tNormal.x*Compare0.x + EnvColors[1]*(-tNormal.x)*Compare1.x;
- float4 ColorY = EnvColors[2]*tNormal.y*Compare0.y + EnvColors[3]*(-tNormal.y)*Compare1.y;
- float4 ColorZ = EnvColors[4]*tNormal.z*Compare0.z + EnvColors[5]*(-tNormal.z)*Compare1.z;
- OUT.Color = (ColorX + ColorY + ColorZ) * 2.0;
- }
-